﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using AccesoBD;
using LogicaNegocio;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarLlamadaDeEmergencia : Form
    {
        private int nroInst;
        private GestorTiposDocumento GTD = new GestorTiposDocumento();

        public frmRegistrarLlamadaDeEmergencia()
        {
            InitializeComponent();
        }

        private void frmRegistrarLlamadaDeEmergencia_Load(object sender, EventArgs e)
        {
            txtNombreInstitucion.Enabled = false;
            txtNumeroDocumento.Enabled = false;
            cmbTipoDocumento.Enabled = false;
            cargarMedicoGuardia();
            lblTipoAfiliado.Text = "N°  ";
        }

        private void rdbPaciente_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbPaciente.Checked)
            {
                limpiar();
                txtNombreInstitucion.Enabled = false;
                txtNumeroDocumento.Enabled = true;
                cmbTipoDocumento.Enabled = true;
                cargarTipoDocumento();
                lblTipoAfiliado.Text = "N° Afiliado ";
            }
        }

        private void rdbInstitucion_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbInstitucion.Checked)
            {
                limpiar();
                txtNombreInstitucion.Enabled = true;
                txtNumeroDocumento.Enabled = false;
                cmbTipoDocumento.Enabled = false;
                lblTipoAfiliado.Text = "N° Institución ";
            }
        }

        private void btnTomarHora_Click(object sender, EventArgs e)
        {
            txtFechaHoraLlamada.Text = DateTime.Now.ToString();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Seguro que desea salir?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
                this.Close();

        }

        public void limpiar()
        {
            txtNumeroDocumento.Text = "";
            cmbTipoDocumento.SelectedIndex = -1;
            txtNombreInstitucion.Text = "";
            txtNum2.Text = "";
            grdResultadoBusqueda.Rows.Clear();
            rdbEmergencia.Checked = false;
            rdbUrgencia.Checked = false;
            txtFechaHoraLlamada.Text = "";
            txtMotivoLlamada.Text = "";
            cmbMedicoGuardia.SelectedItem = -1;
            txtNum.Text = "";

        }

        private void cargarTipoDocumento()
        {

            if (GTD.obtenerTipoDocumento() == null)
            {
                MessageBox.Show("No estan cargados los Tipos de documentos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                cmbTipoDocumento.DataSource = GTD.obtenerTipoDocumento();
                cmbTipoDocumento.ValueMember = "Codigo";
                cmbTipoDocumento.DisplayMember = "Nombre";
            }

        }

        private void cargarMedicoGuardia()
        {
            int diaActual = 0;
            string dia = Convert.ToString(DateTime.Now.ToString("dddd"));
            switch (dia)
            {

                case "domingo":
                    diaActual = 1;
                    break;
                case "lunes":
                    diaActual = 2;
                    break;
                case "martes":
                    diaActual = 3;
                    break;
                case "miércoles":
                    diaActual = 4;
                    break;
                case "jueves":
                    diaActual = 5;
                    break;
                case "viernes":
                    diaActual = 6;
                    break;
                case "sábado":
                    diaActual = 7;
                    break;

            }
            AtencionesExternas a = new AtencionesExternas();
            List<Medico> lista = a.obtenerMedicoGuardia(diaActual);

            if (lista != null)
            {
                cmbMedicoGuardia.DataSource = lista;
                cmbMedicoGuardia.ValueMember = "legajo";
                cmbMedicoGuardia.DisplayMember = "apellidonombre";
            }
            else
            {
                MessageBox.Show("No hay médicos de guardia disponibles actualmente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            grdResultadoBusqueda.AllowUserToAddRows = false;
            int tipoDoc = 0;
            int nroDoc = 0;
            if (rdbPaciente.Checked == true)
            {
                tipoDoc = int.Parse(cmbTipoDocumento.SelectedValue.ToString());
                nroDoc = int.Parse(txtNumeroDocumento.Text);

                AtencionesExternas a = new AtencionesExternas();
                List<Afiliacion> lista = a.obtenerAfiliado(tipoDoc, nroDoc);

                AtencionesExternas a1 = new AtencionesExternas();
                int nro = a1.obtenerNroAfiliado(tipoDoc, nroDoc);

                AtencionesExternas a2 = new AtencionesExternas();
                int nroAfiliadoTit = a2.obtenerDatosTitular(nro);

                AtencionesExternas a3 = new AtencionesExternas();
                string nomApe = a3.obtenerNomApeTitular(nroAfiliadoTit);

                bool esAdherente;
                if (nroAfiliadoTit != 0)
                {
                    esAdherente = true;
                }
                else
                {
                    esAdherente = false;
                }



                grdResultadoBusqueda.Columns.Add("NroHC", "N° Historia Clínica");
                grdResultadoBusqueda.Columns.Add("Afiliado", "Afiliado");
                grdResultadoBusqueda.Columns.Add("NroAfiliado", "N° Afiliado");
                DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
                grdResultadoBusqueda.Columns.Add(chk);
                chk.HeaderText = "Es adherente?";
                grdResultadoBusqueda.Columns.Add("NroAfiliadoTitular", "N° AfiliadoTitular");
                grdResultadoBusqueda.Columns.Add("Titular", "Titular");
                grdResultadoBusqueda.Columns.Add("Domicilio", "Domicilio");
                grdResultadoBusqueda.Columns.Add("Barrio", "Barrio");
                grdResultadoBusqueda.Columns.Add("Telefono", "Telefono");
                if (lista.Count != 0)
                {
                    foreach (Afiliacion item in lista)
                    {

                        long nroHc = item.nroHC;
                        string afiliado = item.nombreApellidoAF;
                        long nroAfiliado = item.nroAfiliado;
                        //bool esAdherente = item.esAdherente;
                        //int nroAfiliadoTitular = item.nroAfiliadoTitular;
                        //string titular = item.nombreApellidoTIT;
                        string domicilio = item.domicilio;
                        string barrio = item.barrio;
                        long telefono = item.telefono;
                        grdResultadoBusqueda.Rows.Add(nroHc, afiliado, nroAfiliado, esAdherente, nroAfiliadoTit, nomApe, domicilio, barrio, telefono);


                    }

                }
                else
                {
                    MessageBox.Show("No se encontraron Afiliados!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    cmbTipoDocumento.SelectedIndex = -1;
                    txtNumeroDocumento.Text = "";
                }
            }
            else
            {
                if (rdbInstitucion.Checked == true)
                {
                    string nombre;
                    nombre = txtNombreInstitucion.Text;

                    AtencionesExternas a = new AtencionesExternas();
                    List<Institucion2> lista = a.obtenerInstitucion(nombre);
                    grdResultadoBusqueda.Columns.Add("NroInstitucion", "Número Institución");
                    grdResultadoBusqueda.Columns.Add("NroConvenio", "Convenio");
                    grdResultadoBusqueda.Columns.Add("NombreInstitucion", "Nombre");
                    grdResultadoBusqueda.Columns.Add("NombreResponsable", "Responsable");
                    grdResultadoBusqueda.Columns.Add("Domicilio", "Domicilio");
                    grdResultadoBusqueda.Columns.Add("Barrio", "Barrio");
                    grdResultadoBusqueda.Columns.Add("Telefono", "Telefono");
                    if (lista.Count != 0)
                    {
                        foreach (Institucion2 item in lista)
                        {

                            int nroInstitucion = item.IdInstitucion;
                            int idConvenio = item.IdConvenioInstitucion;
                            string nombreInstitucion = item.NombreInstitucion;
                            string responsable = item.nombreApellidoResponsable;
                            string domicilio = item.domicilio;
                            string barrio = item.barrio;
                            long telefono = item.Telefono;
                            grdResultadoBusqueda.Rows.Add(nroInstitucion, idConvenio, nombreInstitucion, responsable, domicilio, barrio, telefono);
                        }

                    }
                    else
                    {
                        MessageBox.Show("No se encontraron Instituciones!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtNombreInstitucion.Text = "";
                        txtNumeroDocumento.Focus();
                    }
                }
                else
                    MessageBox.Show("Debe seleccionar tipo de llamado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            DateTime fecha;
            int nroAfiliado;
            string motivo;
            int legajoMedGuardia;
            int codEspMedico = 10;
            string observaciones;
            int idEstadoAtencion = 1;
            //int idInstitucion;


            AtencionesExternas at = new AtencionesExternas();
            AtencionesExternas a = new AtencionesExternas();


            if (rdbPaciente.Checked == true)
            {
                fecha = Convert.ToDateTime(txtFechaHoraLlamada.Text);
                nroAfiliado = Convert.ToInt32(txtNum2.Text);
                motivo = txtMotivoLlamada.Text;
                legajoMedGuardia = int.Parse(cmbMedicoGuardia.SelectedValue.ToString());
                string tipoEoU;
                if (rdbEmergencia.Checked == true)
                {
                    observaciones = "Emergencia";
                    tipoEoU = "Emergencia";
                }
                else
                {
                    observaciones = "Urgencia";
                    tipoEoU = "Urgencia";
                }

                bool res = at.registrarAtencionExternaAfiliado(tipoEoU, fecha, nroAfiliado, motivo, legajoMedGuardia, codEspMedico, observaciones, idEstadoAtencion);

                if (res == true)
                {
                    MessageBox.Show("Se registró correctamente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limpiar();
                }
                else
                {
                    MessageBox.Show("Error al registrar!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }

            }
            else
            {
                if (rdbInstitucion.Checked == true)
                {

                    fecha = Convert.ToDateTime(txtFechaHoraLlamada.Text);
                    motivo = txtMotivoLlamada.Text;
                    //idInstitucion = Convert.ToInt32(grdResultadoBusqueda.Rows[0].Cells[4].ToString());

                    //comentado por mi
                    //idInstitucion = a.prueba(txtNombreInstitucion.Text);
                    legajoMedGuardia = int.Parse(cmbMedicoGuardia.SelectedValue.ToString());
                    string tipoEoU;
                    if (rdbEmergencia.Checked == true)
                    {
                        observaciones = "Emergencia";
                        tipoEoU = "Emergencia";
                    }
                    else
                    {
                        observaciones = "Urgencia";
                        tipoEoU = "Urgencia";
                    }

                    bool res = at.registrarAtencionExternaInstitucion(tipoEoU, fecha, nroInst, motivo, legajoMedGuardia, codEspMedico, observaciones, idEstadoAtencion);


                    if (res == true)
                    {
                        MessageBox.Show("Se registró correctamente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        limpiar();
                    }
                    else
                    {
                        MessageBox.Show("Error al registrar!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    }

                }
            }
            rdbInstitucion.Checked = false;
            rdbPaciente.Checked = false;
        }

        private void txtNumeroDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Debe ingresar dígitos numéricos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (grdResultadoBusqueda.SelectedRows.Count > 0)
            {
                //agregado por la burra
                if (rdbInstitucion.Checked == true)
                {
                    txtNum.Visible = true;
                    txtNum2.Visible = false;
                    nroInst = int.Parse(grdResultadoBusqueda.CurrentRow.Cells["nroInstitucion"].Value.ToString());
                    txtNum.Text = grdResultadoBusqueda.CurrentRow.Cells["nroInstitucion"].Value.ToString();
                }
                else
                {
                    txtNum.Visible = false;
                    txtNum2.Visible = true ;
                    txtNum2.Text = grdResultadoBusqueda.CurrentRow.Cells["nroAfiliado"].Value.ToString();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar un afiliado", "Aviso", MessageBoxButtons.OK);
            }
        }

        private void btnConsultarLlamados_Click(object sender, EventArgs e)
        {
            frmConsultarLlamadaDeEmergencias frm = new frmConsultarLlamadaDeEmergencias();
            frm.Show();
        }



    }
}
